/*! \file Valeur.h
    \brief La spécification des valeurs
   
    Décrit la liste des méthodes et attributs associés à la classe Valeur et à ses sous-classes
    \author Jamet, Koelsch
    \date 19/12/2012
 */


#ifndef VALEUR_H
#define	VALEUR_H
#include <string>
#include <typeinfo>
#include <iostream>
#include <iomanip>

using namespace std;

/*! \class Valeur
    \brief La classe Abstraite représentant les valeurs.
   
    Cette classe permet de représenter sous la forme d'un objet une valeur
    Les méthodes suivantes sont associées à un objet de type Valeur :
    <li>destructeur
    */

class Valeur {
public:
    virtual ~Valeur(){};

};


/*! \class ValeurEntiere
    \brief La classe dérivée de valeur représentant les valeurs entieres.
   
    Cette classe permet de représenter sous la forme d'un objet une valeur entiere
    Les méthodes suivantes sont associées à un objet de type ValeurEntiere :
    <li>constructeur
    <li>getValeur

    Elle possede un attribut de type int qui donne sa valeur
*/


class ValeurEntiere : public Valeur{
public:
    ValeurEntiere(int val=0){
        this->val = val;
    }
    int getValeur() {return val;}
    
private:
    int val;
};


/*! \class ValeurEntiere
    \brief La classe dérivée de valeur représentant les valeurs chaines.
   
    Cette classe permet de représenter sous la forme d'un objet une chaine de caracteres
    Les méthodes suivantes sont associées à un objet de type ValeurChaine :
    <li>constructeur
    <li>getValeur

    Elle possede un attribut de type string qui donne sa valeur
*/
class ValeurChaine : public Valeur{
public:
    ValeurChaine(string val=""){
        this->val = val;
    }
    string getValeur() {return val;}
    
private:
    string val;
};


/*! \class ValeurReelle
    \brief La classe dérivée de valeur représentant les valeurs reelles.
   
    Cette classe permet de représenter sous la forme d'un objet une valeur reelle
    Les méthodes suivantes sont associées à un objet de type ValeurReelle :
    <li>constructeur
    <li>getValeur

    Elle possede un attribut de type float qui donne sa valeur
*/
class ValeurReelle : public Valeur{
public:
    ValeurReelle(float val=0.0){
        this->val = val;
    }
    float getValeur() {return val;}
    
private:
    float val;
};

#endif	/* VALEUR_H */

